<?php

class Archivo_IndexController extends Zend_Controller_Action
{

    /**
     * 
     * @var Zend_Auth_Storage_Interface
     */
    private $_user_info;
    /**
     * 
     * @var Zwei_Admin_Acl
     */
    private $_acl;
    /**
     * 
     * @var string
     */
    private $_page;

    public function init()
    {
        $this->_helper->layout()->disableLayout();
        if (Zend_Auth::getInstance()->hasIdentity()) {
            $this->_user_info = Zend_Auth::getInstance()->getStorage()->read();
            $this->_acl = new Zwei_Admin_Acl($this->_user_info->user_name);
            $this->_page = "archivo/index";
        } else {
            $this->_redirect('index/login');
        }
    }

	public function indexAction()
	{
		// action body
	}

	public function subirAction()
	{
	    if (!$this->_acl->isUserAllowed($this->_page."/subir")) exit("<p>Acceso denegado a $this->_page/subir</p>"); 
		echo "<script src='".BASE_URL."/js/funciones.js'></script>";

		$form = new HTML_Form(BASE_URL.'archivo/index/bl-subir','post','myform','ifrm_process','multipart/form-data');
		echo $form->returnStart()."\n";

		$tableAttrs = array('border' => "0",
                    'cellspacing' => "0",
                    'align' => "center",
                    'class' => "borde");
		$table = new HTML_Table($tableAttrs);

		$titleStyle = array('colspan' => "5");
		$blankStyle = array('colspan' => "5");
		$rowStyle = array('align' => "left");

		$fila = 0;

		$row = array("<h2>&nbsp;&nbsp;Subir Archivo de Clientes</h2>");
		$table->addRow($row,$titleStyle);


		$row = array("");
		$table->addRow($row,$blankStyle);
		$fila++;

		// echo $form->returnHidden("MAX_FILE_SIZE", 500000);
		#---Archivo
		$row = array("",
                 "<p CLASS=textoAzul>Archivo</p>",
		//                  "",
		$form->returnFile("file","",80,"",
		#"class='InputTexto'"),
                                   "class='texto'"),
		#"class=''"),
                 "");

		$table->addRow($row,$rowStyle);
		$fila++;
		$table->updateCellAttributes($fila, 1, array('align' => "right"));


		#--- Linea separadora
		$row = array("<hr class=linea1>");
		$table->addRow($row,$blankStyle);
		$fila++;


		$table->updateCellAttributes($fila,1,array('colspan' => "4"));

		#--- Boton Subir Archivo ------------------------------------------------------

		$row = array("",
		//                  "",
		//                  "",
		#$form->returnButton("Subir Archivo","","class='boton2' onClick='validainfoArchivoClientes()'"),
		$form->returnButton("Subir Archivo","","class='boton2' onClick='if(document.myform.file.value) {document.myform.submit();}else{alert(\"Debes seleccionar un archivo!\");}'"),
                 "");
		$table->addRow($row,array('align' => "center"));
		$fila++;

		/*$table->addRow($row,array('align' => "center", 'bgcolor' => "#ffffff"));
		 $fila++*/;
		$table->updateCellAttributes($fila,1,array('colspan' => "4"));

		$table->display();

		echo $form->returnEnd()."\n";
	}

	public function eliminarAction()
	{
	    if (!$this->_acl->isUserAllowed($this->_page."/eliminar")) exit("<p>Acceso denegado a $this->_page/eliminar</p>"); 
		global $upload_path;
		global $row;

		echo "<script src='".BASE_URL."/js/funciones.js'></script>";


		echo ("<h2>&nbsp;&nbsp;Eliminar Archivo de Clientes</h2>");

		$form = new HTML_Form(BASE_URL.'archivo/index/bl-eliminar','post','myform','ifrm_process');
		echo $form->returnStart()."\n";

		$tableAttrs = array('border' => "0",
		                    'cellspacing' => "0",
		                    'align' => "center",
		                    'class' => "borde3",
		                    'width' => "50%");

		$table = new HTML_Table($tableAttrs);

		$titleStyle = array('colspan' => "5");
		$blankStyle = array('colspan' => "5");
		$rowStyle = array('align' => "left");

		$fila = 0;


		$table->addRow($row,$titleStyle);

		$row = array("");
		$table->addRow($row,$blankStyle);
		$fila++;

		$texto = "";

		$listaArchivos = $this->listaArchivosDirectorioNew( $upload_path );

		if($listaArchivos !== false)
		{

			$row = array("<label class=SUBT>&nbsp;</label>",
		                 "<label class=SUBT>Nombre</label>",
		                 "<label class=SUBT>Tama&ntilde;o</label>",
		                 "<label class=SUBT>Fecha</label>");
			$table->addRow($row, $rowStyle);
			$fila++;

			echo $form->returnHidden("cantarchivos", count($listaArchivos));

			foreach ($listaArchivos as $key => $value)
			{
				$nombre = $value['nombre'];
				$fechaCreacion = date("d-m-Y",$value['fechaCreacion']);
				$size = $value['size'];

				$check = $form->returnCheckbox("checkbox_file".$key, false, 1, @$_REQUEST["checkbox_file"], "id='checkbox_file.$key'");
				echo $form->returnHidden("filename".$key, $nombre);

				$row = array(
		                "$check",
		                "<p CLASS=textoAzul>$nombre</p>",
		                "<p CLASS=textoAzul>$size</p>",
		                "<p CLASS=textoAzul>$fechaCreacion</p>"
				);
				$fila++;
				$table->addRow($row,$rowStyle);
			}
			#--- Linea separadora
			$row = array("");
			$table->addRow($row,$blankStyle);
			$fila++;

			$table->updateCellAttributes($fila,1,array('align' => "left", 'colspan' => "4"));

			$aceptar = $form->returnSubmit("Eliminar","opcion","class='boton' ");
			$cancelar = $form->returnSubmit("Cancelar","opcion","class='boton' onClick='return Cancelar(\"".BASE_URL."/archivo/eliminar\");'");

			$row = array("",
			$aceptar
			//$cancelar,
			);
			//$fila++;
			$table->addRow($row,array('align' => "center"));
			$fila++;
			$table->updateCellAttributes($fila,1,array('align' => "center", 'colspan' => "4"));

			$table->display();
			echo $form->returnEnd()."\n";

		}
		else {
			echo "<p class=TITULO align='center'>No existen Archivos</p>";
		}
	}

	public function blEliminarAction()
	{
		//el archivo subio ok
		if (!$this->_acl->isUserAllowed($this->_page."/eliminar", "DEL")) exit("<script>alert('Acceso denegado a $this->_page/eliminar, DEL')</script>"); 
		global $upload_path;

		$existeArchivo = false;
		$archivos = "";
		for($i=0; $i<$_REQUEST["cantarchivos"]; $i++)
		{
			if(isset($_REQUEST["checkbox_file$i"]) && strcmp($_REQUEST["checkbox_file$i"],"on")==0)
			{
				$existeArchivo = true;
				//$archivos = $_REQUEST["filename$i"]." ";
			}
		}

		if( $existeArchivo )
		{

			for($i=0; $i<$_REQUEST["cantarchivos"]; $i++)
			{
				if(isset($_REQUEST["checkbox_file$i"]) && strcmp($_REQUEST["checkbox_file$i"],"on")==0)
				{

					$archivo = $upload_path."/".$_REQUEST["filename$i"];
					$nombre = $_REQUEST["filename$i"];
					$comando = "rm  ".$upload_path."/\"$nombre\"";
					system($comando);
					//echo $comando;
					$resultado .= "Archivo ".$_REQUEST["filename$i"]." eliminado<br>";

				}
			}
			echo "<script  type='text/javascript'>
                window.parent.cargarPanelCentral('archivo/index/eliminar');
                </script>";

		}
		else
		{
			echo "<script  type='text/javascript'>
                alert('Debes seleccionar un archivo');
                //window.parent.cargarPanelCentral('archivo/index/eliminar');
                </script>";
		}
	}

	public function blSubirAction()
	{
	    if (!$this->_acl->isUserAllowed($this->_page."/subir", "ADD")) exit("<script>alert('Acceso denegado a $this->_page/subir, ADD')</script>"); 
		global $upload_path;

		echo "<p CLASS=TITULO align=center>&nbsp;&nbsp;Subir Archivo de Clientes</p>";
		$resultado = "";

		if($_FILES["file"]["error"]== 0)
		{
			$filename=basename($_FILES["file"]["name"]);
			$tmpname=$_FILES["file"]["tmp_name"];
			$filesize=$_FILES["file"]["size"];

			if(!file_exists($upload_path."/$filename"))
			{
				if(!move_uploaded_file($_FILES["file"]["tmp_name"], $upload_path."/$filename"))
				{
					$resultado= "Ocurrio un problema al copiar el archivo";
				}
				else{
					//validar el archivo
					$resvalida = $this->validarArchivo($upload_path."/$filename");
					$numClientes = $resvalida[1]-1;

					switch ($resvalida[0])
					{
						case 1:
							$resultado =  "Archivo subido exitosamente. Se procesaron ".$numClientes." clientes";
							break;
						case -1:
							$resultado =  "Error en formato del número en la línea ".$resvalida[1];
							$resultado2= $resvalida[2];
							break;

						case -2:
							$resultado =  "El archivo contiene m&aacute;s de 500000 números";
							break;

						default:
							$resultado="Hubo un error desconocido al procesar el archivo (".$resvalida[0].")";
							break;
					}
				}
			}
			else {
				echo "<script>alert('Ya existe un archivo con ese nombre')</script>";
			}


		}
		else {
			echo "<script>alert('Error al subir el archivo [Error=". $_FILES["file"]["error"] ."]')</script>";
		}
		echo "<script>alert('.$resultado.')</script>";
	}


	function validarArchivo($archivo)
	{
		$res = array();

		$gestor = @fopen($archivo, "r");

		//echo "Abrimos el archivo $archivo";

		$res[0]= 1;

		if ($gestor) {
			$contador=0;

			while (!feof($gestor)) {
				//$bufer = substr(fgets($gestor, 40), 0, DTE_CLIENTES_MAX_LARGO_NUMERO);
				$bufer = trim(fgets($gestor, 40));

				//revisamos que el numero sea de largo 11 y que empiece con 5695, 5696, 5697, 5698, 5699
				if(preg_match('/^569[56789][0-9]{7}\s*$/', $bufer) != 1 && preg_match('/^\s*$/', $bufer) != 1) {
					$res[0]=-1;
					$res[1]=$contador;
					$res[2]=$bufer;
					break;
				} else {
					$contador++;
				}

				if($contador>500000) {
					$res[0]=-2;
					break;
				}
			}
		}
		fclose ($gestor);

		if ($res[0] != 1) {
			unlink($archivo);
		} else {
			$res[1]=$contador;
		}
		return $res;
	}

	function listaArchivosDirectorioNew($directorio)
	{
		$archivos=array();
		$i = 0;

		if ($gestor = opendir($directorio))
		{
			while (false !== ($archivo = readdir($gestor)))
			{
				$fechaCreacion = filemtime($directorio.'/'.$archivo);
				if ($archivo != "." && $archivo != "..") {
					$archivos[$i]['nombre'] = $archivo;
					$archivos[$i]['fechaCreacion'] = $fechaCreacion;
					$archivos[$i]['size'] = filesize($directorio.'/'.$archivo);
					$i++;
				}
			}

			closedir($gestor);

			if(count($archivos)==0){
				return false;
			}
			else{
				//asort($archivos[$i]);
				foreach($archivos as $key => $value)
				{
					$fecha[$key] = $value['fechaCreacion'];
				}
				array_multisort($fecha, SORT_DESC, $archivos);
				return $archivos;
			}

		}
	}
}









